load("js/luajs/cgb_luaFunc.js")
load("js/v6/cgb/cgb_login.js")
load("js/v6/cgb/cgb_comm.js")
load("js/v6/cgb/cgb_credit_crawlhandle.js")
load("js/v6/cgb/cgb_debit_crawlhandle.js")
var v6_cgb_java_funcs = {
    openHomePage : function(){
        //判断当前线程是否被锁，如果被锁，则等待锁释放
        logger.info("广发银行taskKey = {} 判断当前线程是否持有锁",context.get(Constants.LUA_TASK_KEY));
        var lockFlag = lock.isHeldByCurrentThread() ;
        if (lockFlag) {
            logger.info("广发银行taskKey = {} 当前线程已经持有锁，无需再次获取锁",context.get(Constants.LUA_TASK_KEY));
        }else {
            logger.info("广发银行taskKey = {} 当前线程没有持有锁，等待获取锁",context.get(Constants.LUA_TASK_KEY));
            lock.lock();
        }
        //广发银行官网首页
        var loginText = get(urls.INDEX_URL);
        storeDataToFile(context, loginText, "firstLoginText.html");
        context.put("login_html",loginText);
    },
    checkProxyAvailable: function(){

        // 获取首页
        var html =context.get("login_html");
        if (html.contains("代理服务器没有响应") || html.contains("使用搜索引擎查找页面") || html.contains("无法显示此页")) {
            logger.info("广发银行taskKey = {} 代理IP异常", context.get(Constants.LUA_TASK_KEY));
            return false;
        }
        return true;
    },
    checkTargetWebsiteAvailable:function () {
        return true;
    },
    needResetEnvironment:function(){
        return true;
    },
    checkControlAvailable:function () {
        //检查控件是否加载成功，或者是否安装
        return Boolean.valueOf(checkControlAvailable());
    },
    login:function () {
        inputBase();
        inputImg();
    },
    crawl:function(){

        //抓取登录成功后的首页内容
        crawlIndex();

        //解析首页，获取_emp_sid
        parseIndex();

        //抓取用户session信息页面
        crawlSessionInfo();

        //解析用户session信息
        parseSessionInfo();

        //根据上下文的卡数量，初始化对应的封装对象，供全局使用
        createData();

        var data_list = context.get(ALL_DATA);

        //获取用户SESSION信息
        var session_iAccountInfoArray=context.get(keys.SESSION_INFO);

        //多卡，对应多个sessionInfo，所以循环处理
        for(var j=0;j<session_iAccountInfoArray.size();j++){
            //获取卡信息封装对象
            var cardAllData=data_list.get(j);

            var session_iAccountInfoObj=session_iAccountInfoArray.getJSONObject(j);
            //账号
            var accountNo=session_iAccountInfoObj.getString("accountNo");
            //开户行
            var openNodeName=session_iAccountInfoObj.getString("openNodeName");


            //每次循环，覆盖账号
            baseMap.put(keys.USER_ACCOUNTNO,accountNo);
            //每次循环，开户行
            baseMap.put(keys.OPEN_NODE_NAME,openNodeName);

            //用于存放后续请求必传参数，32容量，避免扩容
            var seesionHashMap=new LinkedHashMap(32);

            //遍历当前session信息，存入map，用于后续参数传递
            for each (var key in session_iAccountInfoObj.keySet()) {
                seesionHashMap.put(key, session_iAccountInfoObj.getString(key));
            }

            //信用卡处理
            if(card_type.CREDIT.equals(session_iAccountInfoObj.get("accountType"))){
                var creditcard=credit_crawl(cardAllData,seesionHashMap);
                if(creditcard!=undefined)  {
                    listC.add(creditcard);
                    //当两个卡号本质是一张卡时，覆盖掉初始时，context中的多卡数据，调整为listC中实际抓取到的卡数据
                    //否则在转换成json数据时，存在空对象数据
                    context.put(ALL_DATA,listC);
                }
            }else{
                //借记卡处理
                var debitcard=debit_crawl(cardAllData,seesionHashMap);
                listD.add(debitcard);
            }
        }
        if (monthBill.size() > 0) {
            storeDataToFile(context, JSON.toJSONString(monthBill),  "monthBill.html");
        }

        context.put(Constants.CREDIT_DATA, listC);
        context.put(Constants.DEBIT_DATA, listD);

    },
    exitLogin :function () {},
    exit:function () {}
}
